import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.preprocessing import MinMaxScaler
from sklearn import svm
import numpy as np

def draw_decision_function(clf,ax):
    # 2D meshgrid
    xx, yy = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100)) 
    Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) 
    # Decision Function of each mesh coordinate
    Z = Z.reshape(xx.shape)  # reshape to 2D
    # Paint each mesh decision value
    ax.pcolormesh(xx, yy, -Z, cmap=plt.cm.RdBu) 
    return

X,y = make_moons(n_samples=100,noise=0.08, random_state=10)
scaler = MinMaxScaler()
scaler.fit(X)
X = scaler.transform(X)

fig, axs = plt.subplots(1,4, figsize=(18,3))
for i,ax,C,gamma in zip(range(4), axs, [0.005, 0.01, 0.1, 1],[5,7,10,10]):
    clf = svm.SVC(kernel='rbf', gamma=gamma, C=C)
    clf.fit(X, y) 

    draw_decision_function(clf,ax)
    for target, color, marker in zip(range(2),['w','g'],['o','^']):
        ax.scatter(X[y==target,0], X[y==target,1],c=color, marker=marker,
                   label='class '+format(target))
        ax.set_title('SVM, C: ' + format(C) + ', gamma: '+str(gamma))       
    ax.scatter(clf.support_vectors_[:,0], clf.support_vectors_[:,1],
               marker='o', # Draws support vectors
               edgecolor='r', color = 'y', s=90)   
plt.show()
